home *** CD-ROM | disk | FTP | other *** search
-
-
-
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX))))
-
-
-
- NNNNAAAAMMMMEEEE
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss - A function that allows writing of
- upward-compatible applications and widgets
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- ####iiiinnnncccclllluuuuddddeeee <<<<XXXXmmmm////XXXXmmmmPPPP....hhhh>>>>
-
- vvvvooooiiiidddd XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss ((((_w_i_d_g_e_t__c_l_a_s_s, _o_f_f_s_e_t))))
- WWWWiiiiddddggggeeeettttCCCCllllaaaassssssss_w_i_d_g_e_t__c_l_a_s_s;;;;
- XXXXmmmmOOOOffffffffsssseeeettttPPPPttttrrrr* _o_f_f_s_e_t;;;;
-
-
- VVVVEEEERRRRSSSSIIIIOOOONNNN
- This page documents version 1.2 of the Motif library.
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The use of offset records requires one extra global variable
- per widget class. The variable consists of a pointer to an
- array of offsets into the widget record for each part of the
- widget structure. The XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss function
- allocates the offset records needed by an application to
- guarantee upward-compatible access to widget instance
- records by applications and widgets. These offset records
- are used by the widget to access all of the widget's
- variables. A widget needs to take the following steps:
-
-
- +o Instead of creating a resource list, the widget creates
- an offset resource list. To help you accomplish this,
- use the XXXXmmmmPPPPaaaarrrrttttRRRReeeessssoooouuuurrrrcccceeee structure and the XXXXmmmmPPPPaaaarrrrttttOOOOffffffffsssseeeetttt
- macro. The XXXXmmmmPPPPaaaarrrrttttRRRReeeessssoooouuuurrrrcccceeee data structure looks just
- like a resource list, but instead of having one integer
- for its offset, it has two shorts. This is put into
- the class record as if it were a normal resource list.
- Instead of using XXXXttttOOOOffffffffsssseeeetttt for the offset, the widget
- uses XXXXmmmmPPPPaaaarrrrttttOOOOffffffffsssseeeetttt.
-
- XmPartResource resources[] = {
- { BarNxyz, BarCXyz, XmRBoolean,
- sizeof(Boolean), XmPartOffset(Bar,xyz),
- XmRImmediate, (XtPointer)False }
- };
-
-
- +o Instead of putting the widget size in the class record,
- the widget puts the widget part size in the same field.
-
- +o Instead of putting XXXXttttVVVVeeeerrrrssssiiiioooonnnn in the class record, the
- widget puts XXXXttttVVVVeeeerrrrssssiiiioooonnnnDDDDoooonnnnttttCCCChhhheeeecccckkkk in the class record.
-
- +o The widget defines a variable, of type XXXXmmmmOOOOffffffffsssseeeettttPPPPttttrrrr, to
- point to the offset record. This can be part of the
-
-
-
- Page 1 (printed 4/30/98)
-
-
-
-
-
-
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX))))
-
-
-
- widget's class record or a separate global variable.
-
- +o In class initialization, the widget calls
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss, passing it a pointer to contain
- the address of the offset record and the class record.
- This does several things:
-
- Adds the superclass (which, by definition, has already
- been initialized) size field to the part size field
-
- Allocates an array based upon the number of
- superclasses
-
- Fills in the offsets of all the widget parts with the
- appropriate values, determined by examining the size
- fields of all superclass records
-
- Uses the part offset array to modify the offset entries
- in the resource list to be real offsets, in place
-
- +o The widget defines a constant which will be the index
- to its part structure in the offsets array. The value
- should be 1 greater than the index of the widget's
- superclass. Constants defined for all Xm widgets can
- be found in XXXXmmmmPPPP....hhhh.
-
- #define BarIndex (XmBulletinBIndex + 1)
-
-
- +o Instead of accessing fields directly, the widget must
- always go through the offset table. The XXXXmmmmFFFFiiiieeeelllldddd macro
- helps you access these fields. Because the
- XXXXmmmmPPPPaaaarrrrttttOOOOffffffffsssseeeetttt and XXXXmmmmFFFFiiiieeeelllldddd macros concatenate things
- together, you must ensure that there is no space after
- the part argument. For example, the following macros
- do not work because of the space after the part (Label)
- argument:
-
- XmField(w, offset, Label , text, char *)
- XmPartOffset(Label , text)
-
- Therefore, you must not have any spaces after the part
- (Label) argument, as illustrated here:
-
- XmField(w, offset, Label, text, char *)
-
- You can define macros for each field to make this
- easier. Assume an integer field _x_y_z:
-
- #define BarXyz(w) (*(int *)(((char *) w) + \
- offset[BarIndex] + XtOffset(BarPart,xyz)))
-
-
-
-
- Page 2 (printed 4/30/98)
-
-
-
-
-
-
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX))))
-
-
-
- The parameters for XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss are defined below:
-
-
- _w_i_d_g_e_t__c_l_a_s_s
- Specifies the widget class pointer for the created
- widget.
-
- _o_f_f_s_e_t Returns the offset record.
-
-
- RRRREEEELLLLAAAATTTTEEEEDDDD IIIINNNNFFFFOOOORRRRMMMMAAAATTTTIIIIOOOONNNN
- XXXXmmmmRRRReeeessssoooollllvvvveeeeAAAAllllllllPPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX)))).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 3 (printed 4/30/98)
-
-
-
-